草庐IT

C++ 运算符 [] 魔法

全部标签

c++ - 赋值运算符在 C++ 中返回对 *this 的引用

我从“Effectivec++”中了解到这一点,这是第10列。它说这是让赋值运算符返回对*this的引用的好方法。我写了一个代码片段来测试这个想法。我在这里覆盖了赋值运算符。并对其进行了测试。一切都好。但是当我删除那个操作符覆盖时,一切都是一样的。这意味着,链接分配仍然有效。那么,我错过了什么?这是为什么?需要你们的解释,谢谢。#includeusingnamespacestd;classWidget{public:Widget&operator=(intrhs){return*this;}intvalue;};intmain(){Widgetmywidget;mywidget.val

C++:std::istream 检查 EOF 而不读取/消耗 token /使用运算符>>

我想测试std::istream是否已经到达结尾而不读取它。我知道我可以像这样检查EOF:if(is>>something)但这有一系列的问题。想象有许多(可能是虚拟的)方法/函数期望std::istream&作为参数传递。这意味着我必须做一些检查EOF的“家务”,可能使用不同类型的something变量,或者创建一些奇怪的包装器来处理调用输入法的情况.我需要做的就是:if(!IsEof(is))Input(is);IsEof方法应保证流不会因读取而改变,因此上面的行等同于:Input(is)关于在Input方法中读取的数据。如果没有通用的解决方案来表示和std::istream,有没

表达式中的 C++ 运算符重载

我确定这已经在某个地方得到了回答,但我不知道要搜索什么。我有以下情况。我创建了一个Vector类并重载了“*”(乘以escalar)和“+”运算符(添加两个vector)。现在,以下代码行:Vectorsum=(e_x*u_c)+(e_y*u_r);这给了我以下错误:error:nomatchfor'operator+'in'((Teste*)this)->Teste::e_x.Vector::operator*(u_c)+((Teste*)this)->Teste::e_y.Vector::operator*(u_r)'但是,如果我将此错误行替换为:Vectoraux=(e_x*u_

c++ - 运算符<<重载

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Operatoroverloading我没有找到任何可以帮助我解决这个问题的东西......我正在尝试过载,这是我的代码:ostream&Complex::operator这是H文件中的声明:ostream&operator我得到这个错误:error:std::ostream&Complex::operator我做错了什么以及为什么做错了?谢谢

C++ 运算符 < 重载

我对WordEntry.h:classWordEntry{public:WordEntry(stringword);~WordEntry();booloperatorWordEntry.cpp(我删除了构造函数和析构函数):stringWordEntry::getWord(){return_word;}boolWordEntry::operator当我像这样在main.cpp中使用它时,一切都很好:WordEntryw1("Der");WordEntryw2("das");if(w1.operatorw2";}else{coutw1";}但是当我在带有WordEntry对象的vecto

c++ - c++中字符串类对象的+运算符和附加函数之间的区别?

假设我们可以添加两个字符串类对象stringstr1="hello"stringstr2="world"stringfinal=str1+str2;或stringf=str1.append(str2);这两种方法有什么区别??他们添加或实现或其他任何东西的顺序?? 最佳答案 operator+会将两个字符串相加并生成一个新的字符串。append将采用一个字符串并将其连接到字符串的末尾。#include#includeusingnamespacestd;intmain(){stringstr="Writing";stringstr2=

c++ - C/C++ 中的运算符优先级和关联性

请注意,这与OperatorPrecedence..()and++无关,Undefinedbehaviorandsequencepoints,Whyaretheseconstructs(using++)undefinedbehavior?以及这里的数百个类似问题不久:关联性是否由标准保证?详细示例:来自Wikipedia关于运算符优先级的文章,operator*和operator/具有相同的优先级,它们是从左到右运算符。这是否意味着,标准保证,即:intres=x/y*z/t;将被评估为intres=((x/y)*z)/t;或者它是实现定义的?如果有保证,你能报价吗?出于好奇,我总是在

java - 括号和逻辑运算符

考虑这段代码(C++):intx=-4,y=5;boolresult=x>0&&y++表达式(x>0)将首先被计算,并且由于(x>0=false)和短路计算,另一个表达式(y++现在考虑以下代码:intx=-4,y=5;boolresult=(x>0)&&(y++希望括号内的表达式先被求值,这样在进行逻辑与之前,表达式(y++这个案例的解释是什么?! 最佳答案 解释在问题中-短路。在C++中,计算&&(和||就此而言)保证是从左到右的,并且一旦false遇到(分别为true为||),评估保证停止。我想对于Java来说是类似的。括号是

c++ - C/C++ 中的逻辑运算符及其优先级

我最近遇到了一段代码//克服被零除的程序inta=0;intb=100;intc=a==0||b/a;printf("Hello");//输出:你好我的理论:根据优先级,运算符/的优先级高于||。所以b/a必须首先执行,我们应该得到一个运行时错误。我假设正在发生的事情是:短路运算符||,评估LHSa==0,这是真的,因此不执行b/a。我的理论错了吗?我很确定这是非常简单的事情,我现在还想不通 最佳答案 优先级并不意味着评估顺序,只是分组(括号)。在||的第一个操作数求值之后有一个序列点(旧说法),所以||的第一个操作数必须在其次,不

c++ - C++ 和重载运算符的新手,不确定如何使用该函数

嗨,我是C++的新手,我在学习了一些Java基础知识后才开始学习它。我有预先存在的代码,它已经重载了>>>运算符,但是在看了很多教程并试图理解这个问题之后,我想我会在这里问。合理的cpp文件:#include"Rational.h"#includeRational::Rational(){}Rational::Rational(intn,intd){n_=n;d_=d;}/***Createsarationalnumberequivalenttoother*/Rational::Rational(constRational&other){n_=other.n_;d_=other.d_;